{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python for Finance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Analyze Big Financial Data**\n",
    "\n",
    "O'Reilly (2014)\n",
    "\n",
    "Yves Hilpisch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img style=\"border:0px solid grey;\" src=\"http://hilpisch.com/python_for_finance.png\" alt=\"Python for Finance\" width=\"30%\" align=\"left\" border=\"0\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Buy the book ** |\n",
    "<a href='http://shop.oreilly.com/product/0636920032441.do' target='_blank'>O'Reilly</a> |\n",
    "<a href='http://www.amazon.com/Yves-Hilpisch/e/B00JCYHHJM' target='_blank'>Amazon</a>\n",
    "\n",
    "**All book codes & IPYNBs** |\n",
    "<a href=\"http://oreilly.quant-platform.com\">http://oreilly.quant-platform.com</a>\n",
    "\n",
    "**The Python Quants GmbH** | <a href='http://pythonquants.com' target='_blank'>www.pythonquants.com</a>\n",
    "\n",
    "**Contact us** | <a href='mailto:analytics@pythonquants.com'>analytics@pythonquants.com</a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Appendix C: Dates and Times"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylab import plt\n",
    "plt.style.use('seaborn')\n",
    "import matplotlib as mpl\n",
    "mpl.rcParams['font.family'] = 'serif'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import datetime as dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 13, 56, 10, 907937)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.now()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 13, 56, 10, 920874)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "to = dt.datetime.today()\n",
    "to"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(to)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.today().weekday()\n",
    "  # zero numbering 0 = Monday"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 10, 5, 30, 500000)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = dt.datetime(2016, 10, 31, 10, 5, 30, 500000)\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2016-10-31 10:05:30.500000\n"
     ]
    }
   ],
   "source": [
    "print(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2016-10-31 10:05:30.500000'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "str(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.month"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "31"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.day"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "736268"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "o = d.toordinal()\n",
    "o"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 0, 0)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.fromordinal(o)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.time(10, 5, 30, 500000)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t = dt.datetime.time(d)\n",
    "t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.time"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.date(2016, 10, 31)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dd = dt.datetime.date(d)\n",
    "dd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 10, 5)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.replace(second=0, microsecond=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.timedelta(-384, 72559, 366956)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "td = d - dt.datetime.now()\n",
    "td"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.timedelta"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(td)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-384"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "td.days"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "72559"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "td.seconds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "366956"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "td.microseconds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-33105040.633044"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "td.total_seconds()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2016-10-31T10:05:30.500000'"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.isoformat()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Monday, 31. October 2016 10:05AM'"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.strftime(\"%A, %d. %B %Y %I:%M%p\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 3, 31, 0, 0)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.strptime('2017-03-31', '%Y-%m-%d')\n",
    "  # year first and four digit year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 4, 30, 0, 0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.strptime('30-4-16', '%d-%m-%y')\n",
    "  # day first and two digit year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2016-10-31 10:05:30.500000'"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ds = str(d)\n",
    "ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 10, 5, 30, 500000)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.strptime(ds, '%Y-%m-%d %H:%M:%S.%f')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 13, 56, 11, 267083)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.now()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 12, 56, 11, 277621)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.utcnow()\n",
    "  #  Universal Time, Coordinated"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.timedelta(0, 3599, 999994)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt.datetime.now() - dt.datetime.utcnow()\n",
    "  # UTC + 2h = CET (summer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "class UTC(dt.tzinfo):\n",
    "    def utcoffset(self, d):\n",
    "        return dt.timedelta(hours=0)\n",
    "    def dst(self, d):\n",
    "        return dt.timedelta(hours=0)\n",
    "    def tzname(self, d):\n",
    "        return \"UTC\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 12, 56, 11, 324469, tzinfo=<__main__.UTC object at 0x10825c860>)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u = dt.datetime.utcnow()\n",
    "u = u.replace(tzinfo=UTC())\n",
    "  # attach time zone information\n",
    "u"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CET(dt.tzinfo):\n",
    "    def utcoffset(self, d):\n",
    "        return dt.timedelta(hours=2)\n",
    "    def dst(self, d):\n",
    "        return dt.timedelta(hours=1)\n",
    "    def tzname(self, d):\n",
    "        return \"CET + 1\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 14, 56, 11, 324469, tzinfo=<__main__.CET object at 0x1082640b8>)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u.astimezone(CET())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pytz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'United States'"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytz.country_names['US']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Europe/Brussels']"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytz.country_timezones['BE']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Pacific/Wake',\n",
       " 'Pacific/Wallis',\n",
       " 'US/Alaska',\n",
       " 'US/Arizona',\n",
       " 'US/Central',\n",
       " 'US/Eastern',\n",
       " 'US/Hawaii',\n",
       " 'US/Mountain',\n",
       " 'US/Pacific',\n",
       " 'UTC']"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytz.common_timezones[-10:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 12, 56, 11, 446456, tzinfo=<UTC>)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u = dt.datetime.utcnow()\n",
    "u = u.replace(tzinfo=pytz.utc)\n",
    "u"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 13, 56, 11, 446456, tzinfo=<DstTzInfo 'CET' CET+1:00:00 STD>)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u.astimezone(pytz.timezone(\"CET\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 12, 56, 11, 446456, tzinfo=<StaticTzInfo 'GMT'>)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u.astimezone(pytz.timezone(\"GMT\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2017, 11, 18, 6, 56, 11, 446456, tzinfo=<DstTzInfo 'US/Central' CST-1 day, 18:00:00 STD>)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u.astimezone(pytz.timezone(\"US/Central\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## NumPy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.datetime64('2015-10-31')"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nd = np.datetime64('2015-10-31')\n",
    "nd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2015-10-31'"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.datetime_as_string(nd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('D', 1)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.datetime_data(nd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 10, 5, 30, 500000)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.datetime64('2016-10-31T10:05:30.500000')"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nd = np.datetime64(d)\n",
    "nd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 10, 31, 10, 5, 30, 500000)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nd.astype(dt.datetime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.datetime64('2015-10-01')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nd = np.datetime64('2015-10', 'D')\n",
    "nd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.datetime64('2015-10') == np.datetime64('2015-10-01')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-06-10', '2016-07-10', '2016-08-10'], dtype='datetime64[D]')"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array(['2016-06-10', '2016-07-10', '2016-08-10'], dtype='datetime64')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-06-10T12:00:00', '2016-07-10T12:00:00', '2016-08-10T12:00:00'], dtype='datetime64[s]')"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array(['2016-06-10T12:00:00', '2016-07-10T12:00:00',\n",
    "          '2016-08-10T12:00:00'], dtype='datetime64[s]')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-01-01', '2016-01-02', '2016-01-03'], dtype='datetime64[D]')"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange('2016-01-01', '2016-01-04', dtype='datetime64')\n",
    "  # daily frequency as default in this case"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-01', '2016-02', '2016-03', '2016-04', '2016-05', '2016-06',\n",
       "       '2016-07', '2016-08', '2016-09'], dtype='datetime64[M]')"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange('2016-01-01', '2016-10-01', dtype='datetime64[M]')\n",
    "  # monthly frequency"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2015-12-31', '2016-01-07', '2016-01-14', '2016-01-21',\n",
       "       '2016-01-28', '2016-02-04', '2016-02-11', '2016-02-18',\n",
       "       '2016-02-25', '2016-03-03'], dtype='datetime64[W]')"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange('2016-01-01', '2016-10-01', dtype='datetime64[W]')[:10]\n",
    "  # weekly frequency"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-01-01T00', '2016-01-01T01', '2016-01-01T02', '2016-01-01T03',\n",
       "       '2016-01-01T04', '2016-01-01T05', '2016-01-01T06', '2016-01-01T07',\n",
       "       '2016-01-01T08', '2016-01-01T09'], dtype='datetime64[h]')"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtl = np.arange('2016-01-01T00:00:00', '2016-01-02T00:00:00',\n",
    "                dtype='datetime64[h]')\n",
    "  # hourly frequency\n",
    "dtl[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(3000)\n",
    "rnd = np.random.standard_normal(len(dtl)).cumsum() ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nCIIgCCrif++HINO17uvRAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1082f2080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(10, 6))\n",
    "plt.plot(dtl.astype(dt.datetime), rnd)\n",
    "  # convert np.datetime to datetime.datetime\n",
    "plt.grid(True)\n",
    "fig.autofmt_xdate();\n",
    "  # auto formatting of datetime xticks\n",
    "# tag: datetime_plot\n",
    "# title: Plot with datetime.datetime xticks auto-formatted"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-01-01T00:00:00', '2016-01-01T00:00:01', '2016-01-01T00:00:02',\n",
       "       '2016-01-01T00:00:03', '2016-01-01T00:00:04', '2016-01-01T00:00:05',\n",
       "       '2016-01-01T00:00:06', '2016-01-01T00:00:07', '2016-01-01T00:00:08',\n",
       "       '2016-01-01T00:00:09'], dtype='datetime64[s]')"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange('2016-01-01T00:00:00', '2016-01-02T00:00:00',\n",
    "          dtype='datetime64[s]')[:10]\n",
    "  # seconds as frequency"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['2016-01-01T00:00:00.000', '2016-01-01T00:00:00.001',\n",
       "       '2016-01-01T00:00:00.002', '2016-01-01T00:00:00.003',\n",
       "       '2016-01-01T00:00:00.004', '2016-01-01T00:00:00.005',\n",
       "       '2016-01-01T00:00:00.006', '2016-01-01T00:00:00.007',\n",
       "       '2016-01-01T00:00:00.008', '2016-01-01T00:00:00.009'], dtype='datetime64[ms]')"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange('2016-01-01T00:00:00', '2016-01-02T00:00:00',\n",
    "          dtype='datetime64[ms]')[:10]\n",
    "  # milliseconds as frequency"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2016-06-30 00:00:00')"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Timestamp('2016-06-30')\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2016, 6, 30, 0, 0)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = ts.to_pydatetime()\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2016-06-30 00:00:00')"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Timestamp(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2015-10-01 00:00:00')"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Timestamp(nd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-31', '2016-02-29', '2016-03-31', '2016-04-30',\n",
       "               '2016-05-31', '2016-06-30', '2016-07-31', '2016-08-31',\n",
       "               '2016-09-30', '2016-10-31', '2016-11-30', '2016-12-31'],\n",
       "              dtype='datetime64[ns]', freq='M')"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dti = pd.date_range('2016/01/01', freq='M', periods=12)\n",
    "dti"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2016-07-31 00:00:00', freq='M')"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dti[6]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([datetime.datetime(2016, 1, 31, 0, 0),\n",
       "       datetime.datetime(2016, 2, 29, 0, 0),\n",
       "       datetime.datetime(2016, 3, 31, 0, 0),\n",
       "       datetime.datetime(2016, 4, 30, 0, 0),\n",
       "       datetime.datetime(2016, 5, 31, 0, 0),\n",
       "       datetime.datetime(2016, 6, 30, 0, 0),\n",
       "       datetime.datetime(2016, 7, 31, 0, 0),\n",
       "       datetime.datetime(2016, 8, 31, 0, 0),\n",
       "       datetime.datetime(2016, 9, 30, 0, 0),\n",
       "       datetime.datetime(2016, 10, 31, 0, 0),\n",
       "       datetime.datetime(2016, 11, 30, 0, 0),\n",
       "       datetime.datetime(2016, 12, 31, 0, 0)], dtype=object)"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pdi = dti.to_pydatetime()\n",
    "pdi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-31', '2016-02-29', '2016-03-31', '2016-04-30',\n",
       "               '2016-05-31', '2016-06-30', '2016-07-31', '2016-08-31',\n",
       "               '2016-09-30', '2016-10-31', '2016-11-30', '2016-12-31'],\n",
       "              dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DatetimeIndex(pdi)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 01:00:00',\n",
       "               '2016-01-01 02:00:00', '2016-01-01 03:00:00',\n",
       "               '2016-01-01 04:00:00', '2016-01-01 05:00:00',\n",
       "               '2016-01-01 06:00:00', '2016-01-01 07:00:00',\n",
       "               '2016-01-01 08:00:00', '2016-01-01 09:00:00',\n",
       "               '2016-01-01 10:00:00', '2016-01-01 11:00:00',\n",
       "               '2016-01-01 12:00:00', '2016-01-01 13:00:00',\n",
       "               '2016-01-01 14:00:00', '2016-01-01 15:00:00',\n",
       "               '2016-01-01 16:00:00', '2016-01-01 17:00:00',\n",
       "               '2016-01-01 18:00:00', '2016-01-01 19:00:00',\n",
       "               '2016-01-01 20:00:00', '2016-01-01 21:00:00',\n",
       "               '2016-01-01 22:00:00', '2016-01-01 23:00:00'],\n",
       "              dtype='datetime64[ns]', freq=None)"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DatetimeIndex(dtl.astype(pd.datetime))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "rnd = np.random.standard_normal(len(dti)).cumsum() ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(rnd, columns=['data'], index=dti)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x13b54a6d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot(figsize=(10, 6));\n",
    "# tag: pandas_plot\n",
    "# title: Pandas plot with Timestamp xticks auto-formatted"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-31 00:00:00+01:00', '2016-02-29 00:00:00+01:00',\n",
       "               '2016-03-31 00:00:00+02:00', '2016-04-30 00:00:00+02:00',\n",
       "               '2016-05-31 00:00:00+02:00', '2016-06-30 00:00:00+02:00',\n",
       "               '2016-07-31 00:00:00+02:00', '2016-08-31 00:00:00+02:00',\n",
       "               '2016-09-30 00:00:00+02:00', '2016-10-31 00:00:00+01:00',\n",
       "               '2016-11-30 00:00:00+01:00', '2016-12-31 00:00:00+01:00'],\n",
       "              dtype='datetime64[ns, CET]', freq='M')"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.date_range('2016/01/01', freq='M', periods=12, tz=pytz.timezone('CET'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-31 00:00:00-05:00', '2016-02-29 00:00:00-05:00',\n",
       "               '2016-03-31 00:00:00-04:00', '2016-04-30 00:00:00-04:00',\n",
       "               '2016-05-31 00:00:00-04:00', '2016-06-30 00:00:00-04:00',\n",
       "               '2016-07-31 00:00:00-04:00', '2016-08-31 00:00:00-04:00',\n",
       "               '2016-09-30 00:00:00-04:00', '2016-10-31 00:00:00-04:00',\n",
       "               '2016-11-30 00:00:00-05:00', '2016-12-31 00:00:00-05:00'],\n",
       "              dtype='datetime64[ns, US/Eastern]', freq='M')"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dti = pd.date_range('2016/01/01', freq='M', periods=12, tz='US/Eastern')\n",
    "dti"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-31 05:00:00+00:00', '2016-02-29 05:00:00+00:00',\n",
       "               '2016-03-31 04:00:00+00:00', '2016-04-30 04:00:00+00:00',\n",
       "               '2016-05-31 04:00:00+00:00', '2016-06-30 04:00:00+00:00',\n",
       "               '2016-07-31 04:00:00+00:00', '2016-08-31 04:00:00+00:00',\n",
       "               '2016-09-30 04:00:00+00:00', '2016-10-31 04:00:00+00:00',\n",
       "               '2016-11-30 05:00:00+00:00', '2016-12-31 05:00:00+00:00'],\n",
       "              dtype='datetime64[ns, GMT]', freq='M')"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dti.tz_convert('GMT')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "<a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:training@tpq.io\">training@tpq.io</a>\n",
    "\n",
    "**Quant Platform** |\n",
    "<a href=\"http://quant-platform.com\">http://quant-platform.com</a>\n",
    "\n",
    "**Python for Finance** |\n",
    "<a href=\"http://python-for-finance.com\" target=\"_blank\">Python for Finance @ O'Reilly</a>\n",
    "\n",
    "**Derivatives Analytics with Python** |\n",
    "<a href=\"http://derivatives-analytics-with-python.com\" target=\"_blank\">Derivatives Analytics @ Wiley Finance</a>\n",
    "\n",
    "**Listed Volatility and Variance Derivatives** |\n",
    "<a href=\"http://lvvd.tpq.io\" target=\"_blank\">Listed VV Derivatives @ Wiley Finance</a>\n",
    "\n",
    "**Python Training** |\n",
    "<a href=\"http://training.tpq.io\" target=\"_blank\">Python for Finance University Certificate</a>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
